package cn.btks.backstagemanage.user.pojo;

import cn.btks.backstagemanage.role.pojo.Role;
import cn.btks.backstagemanage.unit.pojo.Unit;
import cn.btks.commonserver.valid.LengthValid;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Objects;

/**
 * @Author lijun
 * @Date 2021/1/7 11:01
 */
@Data
@Entity
@AllArgsConstructor
@NoArgsConstructor
public class User{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    /**
     * 用户名
     */
    @Column(columnDefinition = "varchar(50) not null")
    private String username;

    /**
     * 人员名称
     */
    @Column(columnDefinition = "varchar(50) not null")
    private String name;

    /**
     * 密码
     */
    @Column(columnDefinition = "TEXT")
    @NotNull
    private String password;

    /**
     * E-mail
     */
    @Column(columnDefinition = "varchar(50) not null")
    private String email;

    /**
     * 手机号
     */
    @Column(columnDefinition = "TEXT")
    private String telephone;

    /**
     * 职位
     */
    @Column(columnDefinition = "varchar(100) not null")
    private String post;

    /**
     * 单位ID
     */
    private Long unitId;

    @ManyToOne
    @JoinColumn(name = "unitId", insertable = false, updatable = false)
    private Unit unit;

    /**
     * 角色
     */
    @ManyToMany(fetch = FetchType.EAGER,cascade = CascadeType.REMOVE)
//    @JoinTable(name = "user_roles", inverseJoinColumns = @JoinColumn(name = "roles_id"), joinColumns = @JoinColumn(name = "user_id"))
//    @ManyToMany(mappedBy = "users")
    private List<Role> roles;

    private boolean accountNonExpired = true;

    private boolean accountNonLocked = true;

    private boolean credentialsNonExpired = true;

    private boolean enabled = true;
//
//    public Long getId() {
//        return id;
//    }
//
//    public void setId(Long id) {
//        this.id = id;
//    }
//
//    public void setUsername(String username) {
//        this.username = username;
//    }
//
//    public void setPassword(String password) {
//        this.password = password;
//    }

//    public List<Role> getRoles() {
//        return roles;
//    }

//    public void setRoles(List<Role> roles) {
//        this.roles = roles;
//    }
//
//    public void setAccountNonExpired(boolean accountNonExpired) {
//        this.accountNonExpired = accountNonExpired;
//    }
//
//    public void setAccountNonLocked(boolean accountNonLocked) {
//        this.accountNonLocked = accountNonLocked;
//    }
//
//    public void setCredentialsNonExpired(boolean credentialsNonExpired) {
//        this.credentialsNonExpired = credentialsNonExpired;
//    }
//
//    public void setEnabled(boolean enabled) {
//        this.enabled = enabled;
//    }
//
//    /**
//     * 返回用户的角色
//     * @return
//     */
//    @Override
//    public Collection<? extends GrantedAuthority> getAuthorities() {
//        List<SimpleGrantedAuthority> authorities = new ArrayList<>();
//        for(Role role : getRoles()){
//            authorities.add(new SimpleGrantedAuthority(role.getRoleCode()));
//        }
//        return null;
//    }
//
//    @Override
//    public String getPassword() {
//        return password;
//    }
//
//    @Override
//    public String getUsername() {
//        return username;
//    }
//
//    public String getName() {
//        return name;
//    }
//
//    public void setName(String name) {
//        this.name = name;
//    }
//
//    /**
//     * 账户是否未过期
//     * @return
//     */
//    @Override
//    public boolean isAccountNonExpired() {
//        return true;
//    }
//
//    /**
//     * 账户是否未锁定
//     * @return
//     */
//    @Override
//    public boolean isAccountNonLocked() {
//        return true;
//    }
//
//    /**
//     * 密码是否过期
//     * @return
//     */
//    @Override
//    public boolean isCredentialsNonExpired() {
//        return true;
//    }
//
//    /**
//     * 账户是否可用
//     * @return
//     */
//    @Override
//    public boolean isEnabled() {
//        return true;
//    }
//
//    @Override
//    public int hashCode() {
//        return Objects.hash(username);
//    }
//
//    @Override
//    public boolean equals(Object obj) {
//        if (this == obj) return true;
//        if (obj == null || getClass() != obj.getClass()) return false;
//        User user = (User) obj;
//        return Objects.equals(username, user.username);
//    }
}
